package dao;

import model.Usuario;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import util.CustomException;

public class UsuarioDAO extends GenericEntityDAO<Usuario, Long> {

    public Usuario login(Session session, String email, String senha) throws CustomException {
        try {
            Criteria criteria = session.createCriteria(Usuario.class, "usuario");
            criteria.createAlias("usuario.usuarioGrupo", "usuarioGrupo"); // INNER JOIN USUARIO_GRUPO
            criteria.add(Restrictions.eq("usuEmail", email));
            criteria.add(Restrictions.eq("usuSenha", senha));
            return (Usuario) criteria.uniqueResult();
        } catch (Exception e) {
            throw new CustomException("Falha ao fazer o login.", e);
        }
    }

    public void excluirPermissoes(Session session, Usuario usuario) throws CustomException {
        try {
            StringBuilder sbHQL = new StringBuilder();
            sbHQL.append(" DELETE ");
            sbHQL.append("   FROM UsuarioAcao usa");
            sbHQL.append("  WHERE usa.usuario.usuCodigo = :usuCodigo");
            session.createQuery(sbHQL.toString()).setLong("usuCodigo", usuario.getUsuCodigo()).executeUpdate();
        } catch (Exception e) {
            throw new CustomException("Falha ao excluir permissões do usuário " + usuario.getUsuNome(), e);
        }
    }
}
